package br.com.JZSolution.ui.adm;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.NumberFormat;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import br.com.JZSolution.Estoque;
import br.com.JZSolution.modelo.Produto;
import br.com.JZSolution.negocio.ProdutoNegocio;

public class AbaProduto extends JPanel {

	JTextField textoCodigo;
	JTextField textoDescricao;
	JComboBox comboUnidadeMedida;
	JTextField textoQuantidade;
	JTextField	textoQuantidadeMinimaEmEstoque;
	JFormattedTextField textoPreco;
	JTextField palavraChave;
	
	
	
	public AbaProduto(){
		
		setLayout(new GridBagLayout());
		
		String[] labels = {"Código", "Descrição","Unidade Medida","Quantidade","Mínimo em estoque","Preço R$"};
		
		textoCodigo = new JTextField();
		textoCodigo.setPreferredSize(new Dimension(250,35));
		textoCodigo.addKeyListener(new KeyAdapter() {

			public void keyTyped(KeyEvent e) {
				if (!Character.isDigit(e.getKeyChar())) {
					e.consume();
				}
			}
			
		});
		
		JButton codigoOk = new JButton("Ok");
		codigoOk.setToolTipText("Código inserido");
		codigoOk.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				ProdutoNegocio prodNegocio = new ProdutoNegocio();
				Produto prod = prodNegocio.selecionar(Long.parseLong(textoCodigo.getText()));
				if(prod == null){
					// carregar interface para criar
				}else{
					//carregar interface para atualizar
				}
			}
		});
		
		JButton lerComScanner = new JButton("SCN");
		lerComScanner.setToolTipText("Ler código com scanner");
		lerComScanner.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Lendo com scanner");
				//TODO ler com scanner
			}
		});
		
		textoDescricao = new JTextField();
		textoDescricao.setPreferredSize(new Dimension(500,35));
		
		comboUnidadeMedida = new JComboBox();
		for(Produto.TipoQuantidadeVenda tipos:Produto.TipoQuantidadeVenda.values()){
			comboUnidadeMedida.addItem(tipos.getNome());
		}
		
		textoQuantidade = new JTextField();
		textoQuantidade.setPreferredSize(new Dimension(100,35));
		
		textoQuantidadeMinimaEmEstoque = new JTextField();
		textoQuantidadeMinimaEmEstoque.setPreferredSize(new Dimension(100,35));
		
		//TODO MUITO RUIM ou não sei usar direito trocar ou aprender
		textoPreco = new JFormattedTextField(NumberFormat.getCurrencyInstance());
		textoPreco.setValue(new Double(5567));
		textoPreco.setPreferredSize(new Dimension(100,35));
		textoPreco.setColumns(10);
		textoPreco.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent ev) {
				try {
					textoPreco.setValue(Double.parseDouble(textoPreco.getText()));
					textoPreco.commitEdit();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
			
			@Override
			public void keyReleased(KeyEvent ev) {
				try {
					textoPreco.setValue(Double.parseDouble(textoPreco.getText()));
					textoPreco.commitEdit();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
			
			@Override
			public void keyPressed(KeyEvent ev) {
				try {
					textoPreco.setValue(Double.parseDouble(textoPreco.getText()));
					textoPreco.commitEdit();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		GridBagConstraints c = new GridBagConstraints();
		c.anchor = GridBagConstraints.LINE_END;
		//c.insets = new Insets(0,0,2,0);
		c.gridx = 1;      
		int grid = c.gridy = 0;
		
		JPanel panelLabels = new JPanel(new GridBagLayout());
		JLabel lab;
		for(String label:labels){
			lab = new JLabel(label);
			lab.setPreferredSize(new Dimension(200,33));
			lab.setHorizontalTextPosition(SwingConstants.CENTER);
			lab.setBorder(BorderFactory.createLineBorder(Color.BLACK));
			panelLabels.add(lab,c);
			c.gridy = ++grid;
		}
		
		grid = 0;
		c.anchor = GridBagConstraints.LINE_START;
		JPanel panelTexto = new JPanel(new GridBagLayout());
		c.gridy = grid;
		
		panelTexto.add(textoCodigo,c);
		{
			int temp = c.gridx;
			c.gridx++;
			panelTexto.add(codigoOk,c);	
			c.gridx++;
			panelTexto.add(lerComScanner,c);
			
			c.gridx = temp;
		}
		c.gridy = ++grid;
		
		panelTexto.add(textoDescricao,c);
		c.gridy = ++grid;
		
		panelTexto.add(comboUnidadeMedida,c);
		c.gridy = ++grid;
		
		panelTexto.add(textoQuantidade,c);
		c.gridy = ++grid;
		
		panelTexto.add(textoQuantidadeMinimaEmEstoque,c);
		c.gridy = ++grid;
		
		panelTexto.add(textoPreco,c);
		
		JPanel panelBotao = new JPanel();
		
		JButton cadastrar = new JButton("Cadastrar");
		cadastrar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Produto prod = new Produto();
				prod.setCodigo(Long.parseLong(textoCodigo.getText()));
				prod.setDescricao(textoDescricao.getText());
				prod.setQuantidadeAtualEstoque(Long.parseLong(textoQuantidade.getText()));
				prod.setQuantidadeMinimaEstoque(Long.parseLong(textoQuantidadeMinimaEmEstoque.getText()));
				//prod.setEmpresa(Estoque.getInstance().getFuncionarioLogado().getEmpresa());
				prod.setPreco(Double.parseDouble(textoPreco.getText()));
				prod.setTipoQuantidadeVenda(Produto.tipoQuantidadeVendaPorNome(comboUnidadeMedida.getSelectedItem().toString()));
				
			}
		});
		
		JButton atualizar = new JButton("Atualizar");
		atualizar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Produto prod = new Produto();
				prod.setCodigo(Long.parseLong(textoCodigo.getText()));
				prod.setDescricao(textoDescricao.getText());
				prod.setQuantidadeAtualEstoque(Long.parseLong(textoQuantidade.getText()));
				prod.setQuantidadeMinimaEstoque(Long.parseLong(textoQuantidadeMinimaEmEstoque.getText()));
				//prod.setEmpresa(Estoque.getInstance().getFuncionarioLogado().getEmpresa());
				prod.setPreco(Double.parseDouble(textoPreco.getText()));
				prod.setTipoQuantidadeVenda(Produto.tipoQuantidadeVendaPorNome(comboUnidadeMedida.getSelectedItem().toString()));
				
			}
		});
		
		JButton cancelar = new JButton("Cancelar");
		cancelar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				textoCodigo.setText("");
				textoDescricao.setText("");
				textoQuantidade.setText("");
				textoQuantidadeMinimaEmEstoque.setText("");
				textoPreco.setText("");
			}
		});
		
		panelBotao.add(cancelar);
		panelBotao.add(cadastrar);
		panelBotao.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		
		
		panelLabels.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		panelTexto.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		
		JPanel panelBusca = new JPanel();
		JButton buscar = new JButton("Buscar");
		buscar.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		palavraChave = new JTextField();
		palavraChave.setColumns(30);
		palavraChave.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e) {
				if(palavraChave.getText().length() >= 2){
					//TODO fazer a busca e preencher a lista
				}
			}
		});
		
		JLabel labelPalavraChave = new JLabel("Palavra chave: ");
		panelBusca.add(labelPalavraChave);
		panelBusca.add(palavraChave);
		panelBusca.add(buscar);
		
		c.anchor = GridBagConstraints.NORTH;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.gridx= 0;
		c.gridy= 0;
		c.gridwidth = 2;
		add(panelBusca,c);
		c.gridwidth = 1;
		c.gridy= 1;	
		c.weightx= 0.3;	
		add(panelLabels,c);
		c.weightx= 0.6;	
		c.gridx= 1;
		add(panelTexto,c);
		c.gridy= 2;
		c.gridx= 0;
		c.gridwidth = 2;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.anchor = GridBagConstraints.CENTER;
		add(panelBotao,c);
		
		
		
		setBorder(BorderFactory.createLineBorder(Color.RED));
	}
	
	
	
	private void cadastrarProduto(Produto prod){
		ProdutoNegocio produtoNegocio = new ProdutoNegocio();
		produtoNegocio.criar(prod);
	}
	
	
}
